home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 15 / CU Amiga Magazine's Super CD-ROM 15 (1997)(EMAP Images)(GB)[!][issue 1997-10].iso / CUCD / Utilities / Post / Source / Screen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-13  |  3.1 KB  |  110 lines

  1. #include "PostPre.h"
  2. #include "Global.h"
  3.  
  4. static    UWORD penspec[] = {0, 1, 1, 2, 1, 3, 1, 0, 2, 1, 2, 1, (UWORD) ~0};
  5. struct    ColorMap scr_colormap;
  6. static    UWORD    screenbwcolors[4] =        /* Screen Black and white */
  7. {
  8.         0xaaa, 0x000, 0xfff, 0x68b            /* Standard OS 2.0 Workbench colors */
  9. };
  10.  
  11. static    UWORD    screenrgbcolors[16] =    /* Screen RGB */
  12. {
  13.         0xaaa, 0x000, 0xfff, 0x68b,        /* Standard OS 2.0 Workbench colors */
  14.         0x000, 0x000, 0x000, 0x000,        /* Black */
  15.         0xfff, 0x0ff, 0xf0f, 0x00f,        /* White   cyan    magenta blue */
  16.         0xff0, 0x0f0, 0xf00, 0x000         /* Yellow  green   red     black */
  17. };
  18.  
  19. static    UWORD    screencmykcolors[32] =    /* Screen CMYK */
  20. {
  21.         0xaaa, 0x000, 0xfff, 0x68b,        /* Standard OS 2.0 Workbench colors */
  22.         0x000, 0x000, 0x000, 0x000,        /* Black */
  23.         0xfff, 0x0ff, 0xf0f, 0x00f,        /* White   cyan    magenta blue */
  24.         0xff0, 0x0f0, 0xf00, 0x000,         /* Yellow  green   red     black */
  25.         0xfff, 0x0ff, 0xf0f, 0x00f,        /* White   cyan    magenta blue */
  26.         0xff0, 0x0f0, 0xf00, 0x000,         /* Yellow  green   red     black */
  27.         0x000, 0x000, 0x000, 0x000,        /* Black */
  28.         0x000, 0x000, 0x000, 0x000            /* Black */
  29. };
  30.  
  31. void    openscreen(void)
  32. {
  33.     if(custscreen == NULL)
  34.     {
  35.         ScrDepth = Options.PostOpts.depth + 1;
  36.         sprintf(postpubscrname, "%s%d", PSNAME, post_count);
  37.         custscreen = OpenScreenTags(NULL,
  38.                 SA_Left,            0,
  39.                 SA_Top,            0,
  40.                 SA_Depth,        ScrDepth,
  41.                 SA_Width,        Options.Screen.ScrWidth,
  42.                 SA_Height,        Options.Screen.ScrHeight,
  43.                 SA_Title,        (ULONG) titlewait,
  44.                 SA_Type,            PUBLICSCREEN,
  45.                 SA_DisplayID,    Options.Screen.ScrDisplayID,
  46.                 SA_Overscan,    Options.Screen.ScrOverscanType,
  47.                 SA_AutoScroll,    Options.Screen.ScrAutoScroll,
  48.                 SA_Pens,            (ULONG) penspec,
  49.                 SA_Interleaved, TRUE,
  50.                 SA_PubName,        (ULONG) postpubscrname,
  51.                 TAG_DONE);
  52.     }
  53.     if (custscreen == NULL)
  54.     {
  55.         okmsg("can't open screen");
  56.         errorende();
  57.         exit(20);
  58.     }
  59.  
  60.     PubScreenStatus(custscreen, 0L);
  61. /*    MoveScreen(custscreen, -ScrWidth, -ScrHeight);*/
  62.     scr_colormap.Count = 1 << ScrDepth;
  63.     if(Options.PostOpts.depth == 1) scr_colormap.ColorTable = (APTR) screenbwcolors;
  64.     else if (Options.PostOpts.depth == 3) scr_colormap.ColorTable = (APTR) screenrgbcolors;
  65.     else scr_colormap.ColorTable = (APTR) screencmykcolors;
  66.     LoadRGB4(&custscreen->ViewPort, (UWORD *) scr_colormap.ColorTable,
  67.                 1 << ScrDepth);
  68.     screen = custscreen;
  69. }
  70.  
  71. BOOL    openpubscreen(struct PubScrContext *pscontext, char *psname)
  72. {
  73.     if((pscontext->pubscreen = LockPubScreen(psname)) == NULL)
  74.     {
  75. /*        okmsg("can't obtain public screen!");
  76.         return(FALSE);*/
  77.         okmsg("can't obtain public screen! falling back on workbench");
  78.         strcpy(pubscreenname, "Workbench");
  79.         if((pscontext->pubscreen = LockPubScreen(pubscreenname)) == NULL)
  80.         {
  81.             okmsg("can't obtain workbench screen!");
  82.             return(FALSE);
  83.         }
  84.     }
  85.     pscontext->ps_lock = TRUE;
  86.     if(argwindow) GetNeededPens(pscontext);
  87.     screen = pscontext->pubscreen;
  88.     return(TRUE);
  89. }
  90.  
  91. void    GetVisual(void)
  92. {
  93.     if(my_VisualInfo) return;
  94.     my_VisualInfo = GetVisualInfo(screen, TAG_END);
  95.     if (my_VisualInfo == NULL)
  96.     {
  97.         okmsg("can't get visual info");
  98.         errorende();
  99.         exit(20);
  100.     }
  101. }
  102.  
  103. void    FreeVisual(void)
  104. {
  105.     if (my_VisualInfo)
  106.     {
  107.         FreeVisualInfo(my_VisualInfo);
  108.         my_VisualInfo = NULL;
  109.     }
  110. }